package folder.networks;

import java.util.List;

import folder.model.link.Link;
import folder.model.network.Network;
import folder.model.node.Node;

public class GeantNetwork
{	
	public final Network network;
	
	public GeantNetwork()
	{
		network = Network.network();
		
		generateNodes();
		generateLinks();
		connect();
	}
	
	private void generateNodes()
	{	
		for( int i = 0; i < 40; i++ )
			network.addNode( Node.node( i, network ) );
	}
	
	private void generateLinks()
	{
		List< Node > nodes = network.getNodes();
		List< Link > links = network.getLinks();
		
		links.add( Link.link(  0, 10000,  179, nodes.get(  0 ), nodes.get(  1 ), network ) );
		links.add( Link.link(  1, 10000,  926, nodes.get(  0 ), nodes.get(  2 ), network ) );
		links.add( Link.link(  2, 10000,  490, nodes.get(  0 ), nodes.get(  4 ), network ) );
		
		links.add( Link.link(  3, 10000,  503, nodes.get(  1 ), nodes.get( 34 ), network ) );
		
		links.add( Link.link(  4, 10000,  745, nodes.get(  2 ), nodes.get(  4 ), network ) );
		links.add( Link.link(  5, 10000, 2721, nodes.get(  2 ), nodes.get( 31 ), network ) );
		links.add( Link.link(  6, 10000, 3772, nodes.get(  2 ), nodes.get( 32 ), network ) );
		links.add( Link.link(  7, 10000,  746, nodes.get(  2 ), nodes.get( 35 ), network ) );
		links.add( Link.link(  8, 10000,  726, nodes.get(  2 ), nodes.get( 36 ), network ) );
		links.add( Link.link(  9, 10000, 1405, nodes.get(  2 ), nodes.get( 38 ), network ) );
		
		links.add( Link.link( 10, 10000,  952, nodes.get(  3 ), nodes.get(  4 ), network ) );
		links.add( Link.link( 11, 10000,  377, nodes.get(  3 ), nodes.get(  5 ), network ) );
		links.add( Link.link( 12,  1000, 1243, nodes.get(  3 ), nodes.get( 10 ), network ) );
		links.add( Link.link( 13,  1000, 1278, nodes.get(  3 ), nodes.get( 19 ), network ) );
		links.add( Link.link( 14, 10000,  812, nodes.get(  3 ), nodes.get( 30 ), network ) );
		
		links.add( Link.link( 15, 10000,  637, nodes.get(  4 ), nodes.get(  5 ), network ) );
		links.add( Link.link( 16, 10000,  289, nodes.get(  4 ), nodes.get(  6 ), network ) );
		links.add( Link.link( 17, 10000,  375, nodes.get(  4 ), nodes.get(  8 ), network ) );
		links.add( Link.link( 18,  1000, 3084, nodes.get(  4 ), nodes.get( 16 ), network ) );
		links.add( Link.link( 19,  2500, 3389, nodes.get(  4 ), nodes.get( 17 ), network ) );
		links.add( Link.link( 20, 10000,  878, nodes.get(  4 ), nodes.get( 29 ), network ) );
		links.add( Link.link( 21, 10000, 3167, nodes.get(  4 ), nodes.get( 31 ), network ) );
		
		links.add( Link.link( 22, 10000,  364, nodes.get(  5 ), nodes.get( 23 ), network ) );
		
		links.add( Link.link( 23, 10000,  429, nodes.get(  6 ), nodes.get(  7 ), network ) );
		
		links.add( Link.link( 24, 10000,  605, nodes.get(  7 ), nodes.get(  8 ), network ) );
		links.add( Link.link( 25, 10000, 1152, nodes.get(  7 ), nodes.get( 25 ), network ) );
		links.add( Link.link( 26, 10000,  403, nodes.get(  7 ), nodes.get( 34 ), network ) );
		
		links.add( Link.link( 27, 10000,  253, nodes.get(  8 ), nodes.get(  9 ), network ) );
		links.add( Link.link( 28, 10000, 1432, nodes.get(  8 ), nodes.get( 25 ), network ) );
		
		links.add( Link.link( 29, 10000, 1790, nodes.get(  9 ), nodes.get( 15 ), network ) );
		links.add( Link.link( 30,  1000,  189, nodes.get(  9 ), nodes.get( 18 ), network ) );
		links.add( Link.link( 31, 10000, 1531, nodes.get(  9 ), nodes.get( 25 ), network ) );
		links.add( Link.link( 32, 10000,  851, nodes.get(  9 ), nodes.get( 29 ), network ) );
		
		links.add( Link.link( 33,  1000, 1079, nodes.get( 11 ), nodes.get( 13 ), network ) );
		
		links.add( Link.link( 34, 10000,  355, nodes.get( 12 ), nodes.get( 13 ), network ) );
		links.add( Link.link( 35, 10000, 1330, nodes.get( 12 ), nodes.get( 14 ), network ) );
		links.add( Link.link( 36, 10000,  483, nodes.get( 12 ), nodes.get( 15 ), network ) );
		links.add( Link.link( 37,   155,  222, nodes.get( 12 ), nodes.get( 20 ), network ) );
		links.add( Link.link( 38, 10000,  689, nodes.get( 12 ), nodes.get( 22 ), network ) );
		
		links.add( Link.link( 39, 10000, 1104, nodes.get( 13 ), nodes.get( 14 ), network ) );
		links.add( Link.link( 40, 10000,  845, nodes.get( 13 ), nodes.get( 22 ), network ) );
		
		links.add( Link.link( 41, 10000, 1340, nodes.get( 15 ), nodes.get( 29 ), network ) );
		
		links.add( Link.link( 42,  1000, 3945, nodes.get( 16 ), nodes.get( 34 ), network ) );
		
		links.add( Link.link( 43,  2500, 4225, nodes.get( 17 ), nodes.get( 34 ), network ) );
		
		links.add( Link.link( 44,   155,  551, nodes.get( 21 ), nodes.get( 27 ), network ) );
		
		links.add( Link.link( 45, 10000,  225, nodes.get( 22 ), nodes.get( 23 ), network ) );
		links.add( Link.link( 46, 10000,  323, nodes.get( 22 ), nodes.get( 26 ), network ) );
		links.add( Link.link( 47, 10000,  384, nodes.get( 22 ), nodes.get( 27 ), network ) );
		
		links.add( Link.link( 48, 10000,   82, nodes.get( 23 ), nodes.get( 29 ), network ) );
		
		links.add( Link.link( 49, 10000,  632, nodes.get( 24 ), nodes.get( 25 ), network ) );
		links.add( Link.link( 50, 10000, 1727, nodes.get( 24 ), nodes.get( 34 ), network ) );
		
		links.add( Link.link( 51, 10000,  165, nodes.get( 27 ), nodes.get( 28 ), network ) );
		
		links.add( Link.link( 52, 10000,  311, nodes.get( 28 ), nodes.get( 29 ), network ) );
		
		links.add( Link.link( 53, 10000,  209, nodes.get( 30 ), nodes.get( 39 ), network ) );
		
		links.add( Link.link( 54,  2500, 2741, nodes.get( 32 ), nodes.get( 34 ), network ) );
		
		links.add( Link.link( 55, 10000,  712, nodes.get( 33 ), nodes.get( 34 ), network ) );
		links.add( Link.link( 56, 10000,  712, nodes.get( 33 ), nodes.get( 34 ), network ) );
		
		links.add( Link.link( 57, 10000,  940, nodes.get( 35 ), nodes.get( 36 ), network ) );
		
		links.add( Link.link( 58, 10000,  482, nodes.get( 36 ), nodes.get( 37 ), network ) );
		links.add( Link.link( 59, 10000,  482, nodes.get( 36 ), nodes.get( 37 ), network ) );
		
		links.add( Link.link( 60, 10000,  262, nodes.get( 38 ), nodes.get( 39 ), network ) );
	}
	
	private void connect()
	{
		for( Link link: network.getLinks() )
		{
			link.getNodeA().addLink( link );
			link.getNodeB().addLink( link );
		}
	}

}
